home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-03
/
pvt12.zip
/
PVTVIEW.BAS
< prev
next >
Wrap
BASIC Source File
|
1990-11-22
|
5KB
|
219 lines
'$DYNAMIC
DECLARE SUB GetPassword ()
DECLARE SUB Prompts ()
DECLARE SUB Crypt (PWord$)
DECLARE SUB LoadFile ()
DECLARE SUB FillScreen ()
DECLARE SUB Browse ()
DECLARE SUB PassWord ()
DECLARE SUB InitScreen ()
DEFINT A-Z
DIM SHARED Buf$(5000)
DIM SHARED fore, back, LineCnt, Top, PWord$
InitScreen
LoadFile
Browse
ErrorHandler:
BEEP
COLOR 7, 0: CLS
SELECT CASE ERR
CASE 14
PRINT "File too big (40k max)"
CASE 52
PRINT "Bad File Name or Number"
CASE 71
PRINT "Disk Not Ready"
CASE 76
PRINT "Path Not Found"
CASE ELSE
PRINT "Error #"; ERR
ERROR ERR
END SELECT
END
REM $STATIC
SUB Browse
CLS
Top = 0
DO
FillScreen
Prompts
KeyPress$ = ""
DO
KeyPress$ = INKEY$
LOOP WHILE KeyPress$ = ""
SELECT CASE KeyPress$
CASE CHR$(0) + "H"' Up
IF Top > 0 THEN Top = Top - 1
CASE CHR$(0) + "P"' Down
IF Top < LineCnt - 23 THEN Top = Top + 1
CASE CHR$(0) + "I" ' PgUp
IF Top > 22 THEN
Top = Top - 23
ELSE
Top = 0
END IF
CASE CHR$(0) + "Q" ' PgDn
IF Top < LineCnt - 46 THEN
Top = Top + 23
ELSE
IF LineCnt > 22 THEN
Top = LineCnt - 23
ELSE
Top = 0
END IF
END IF
CASE CHR$(0) + "G" ' Home
Top = 0
CASE CHR$(0) + "O" ' End
IF LineCnt > 22 THEN
Top = LineCnt - 23
ELSE
Top = 0
END IF
CASE CHR$(27)
DEF SEG = &H50
POKE 0, 0 ' re-enable print screen
COLOR 7, 0
CLS
END
CASE ELSE
BEEP
END SELECT
LOOP
END SUB
SUB Crypt (PWord$)
STATIC i, j
PRINT
PRINT "Unscrambling..."
' calculate Xor value
xnum = 0
FOR i = 1 TO 4
xnum = xnum + (ASC(MID$(PWord$, i, 1)) * i)
NEXT
xnum = xnum MOD 256
' crypt buffer
FOR i = 0 TO LineCnt
FOR j = 1 TO LEN(Buf$(i))
IF j MOD 2 THEN ' even/odd
MID$(Buf$(i), j, 1) = CHR$(ASC(MID$(Buf$(i), j, 1)) XOR xnum)
ELSE
MID$(Buf$(i), j, 1) = CHR$(ASC(MID$(Buf$(i), j, 1)) XOR (255 - xnum))
END IF
NEXT
NEXT
END SUB
SUB FillScreen
COLOR fore, back
LOCATE 2, 1
FOR i = Top TO Top + 22
IF i > LineCnt THEN
PRINT SPACE$(80);
ELSE
PRINT LEFT$(Buf$(i) + SPACE$(80), 80);
END IF
NEXT
END SUB
SUB GetPassword
PWord$ = " "
Posn = 1
DO
LOCATE 1, 38 + Posn, 1
PKey$ = ""
DO
PKey$ = UCASE$(INKEY$)
LOOP WHILE PKey$ = ""
SELECT CASE PKey$
CASE "0" TO "9", "A" TO "Z", " "
PRINT " ";
MID$(PWord$, Posn, 1) = PKey$
Posn = Posn + 1
IF Posn > 4 THEN EXIT DO
CASE CHR$(8), CHR$(0) + "K"
IF Posn > 1 THEN
Posn = Posn - 1
ELSE
BEEP
END IF
CASE CHR$(27)
PWord$ = " "
EXIT DO
CASE ELSE
BEEP
END SELECT
LOOP
COLOR fore, back
CLS
END SUB
SUB InitScreen
CLS
' check for color/monochrome monitor
DEF SEG = 0
IF PEEK(&H449) = 7 THEN ' monochrome
fore = 7: back = 0
ELSE 'colour
fore = 11: back = 1
END IF
DEF SEG
' init screen
COLOR fore, back: CLS
COLOR fore, back
END SUB
SUB LoadFile
COLOR fore + 16, back
LOCATE 2, 1
PRINT "loading file...";
COLOR fore, back
ON ERROR GOTO ErrorHandler
OPEN COMMAND$ FOR INPUT AS 1
INPUT #1, Buf$(0)
IF Buf$(0) = "{ePbVaT}" THEN ' Private file
BEEP
DEF SEG = &H50
POKE 0, 1 ' disable print screen
DEF SEG
CLS
PRINT "Private File! Please enter password: [xxxx]"
GetPassword
CLOSE #1
PRINT "Loading file..."
OPEN COMMAND$ FOR BINARY AS #1
Tmp$ = SPACE$(10)
GET #1, , Tmp$
LineCnt = 0
DO WHILE NOT EOF(1)
GET #1, , Length%
Buf$(LineCnt) = SPACE$(Length)
GET #1, , Buf$(LineCnt)
LineCnt = LineCnt + 1
LOOP
Crypt PWord$
ELSE
LineCnt = 1
DO WHILE NOT EOF(1)
LINE INPUT #1, Buf$(LineCnt)
IF Buf$(LineCnt) = CHR$(12) THEN Buf$(LineCnt) = " "
LineCnt = LineCnt + 1
LOOP
END IF
CLOSE 1
ON ERROR GOTO 0
END SUB
SUB Prompts
COLOR back, fore
LOCATE 1, 1, 0
PRINT SPACE$(32); "< Private View >"; SPACE$(5); "v1.2 (c) 1990 Brent Ashley "
LOCATE 25, 1
PRINT " <"; CHR$(24); "> <"; CHR$(25); "> <PgUp> <PgDn> <Home> <End>"; SPACE$(34); " Esc=Quit ";
LOCATE 1, 2: PRINT USING " Top:####/####"; Top + 1; LineCnt;
END SUB